package cn.rwklyd.BookKeeping.config;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Knife4jConfig {

    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                // 配置接口文档基本信息
                .info(this.getApiInfo())
                // 配置全局安全认证
                .components(new Components()
                        .addSecuritySchemes("Authorization", new SecurityScheme()
                                .type(SecurityScheme.Type.HTTP)
                                .scheme("bearer")
                                .bearerFormat("JWT")
                                .in(SecurityScheme.In.HEADER)
                                .name("Authorization")
                                .description("JWT认证，请输入Bearer {token}")))
                // 添加全局安全要求
                .addSecurityItem(new SecurityRequirement().addList("Authorization"));
    }

    private Info getApiInfo() {
        return new Info()
                // 配置文档标题
                .title("个人记账APP接口文档")
                // 配置文档描述
                .description("这是一个用于记录个人记账操作的接口文档，提供相关API的详细信息")
                // 配置作者信息
                .contact(new Contact()
                        .name("小熊仔不迷路")
                        .url("https://asaki.rwklyd.cn")
                        .email("2398290381@qq.com"))
                // 配置License许可证信息
                .license(new License()
                        .name("Apache 2.0")
                        .url("https://www.apache.org/licenses/LICENSE-2.0.html"))
                // 概述信息
                .summary("用于个人记账系统的API文档")
                .termsOfService("https://www.example.com/terms") // 替换为您的条款链接
                // 配置版本号
                .version("1.0");
    }
}

